#include "Int_OLED.h"
#include "Int_I2c.h"

/** OLED 写入数据  */
#define OLED_W 0X78

/**
 * @brief 初始化数据
 *
 */
void Int_OLED_Init()
{
    u8 init_com[6];
    init_com[0] = 0XAE;
    init_com[1] = 0XA1;
    init_com[2] = 0XC8;
    init_com[3] = 0X8D;
    init_com[4] = 0X14;
    init_com[5] = 0XAF;
    Int_OLED_Send_Com(init_com, 6);
}

void Int_OLED_Send(u8 *str, u8 str_lenth, bit is_data)
{
    u8 i;
    Int_I2c_Start();
    Int_I2c_Transmit(OLED_W);
    Int_I2c_Reception_Ack();

    // co = 是否连续, D/C(数据\命令)
    if (is_data == 1) {
        Int_I2c_Transmit(0X40);
    } else {
        Int_I2c_Transmit(0X00);
    }
    Int_I2c_Reception_Ack();

    for (i = 0; i < str_lenth; i++) {
        Int_I2c_Transmit(str[i]);
        Int_I2c_Reception_Ack();
    }
    Int_I2c_Stop();
}

/**
 * @brief 发送数据
 *
 * @param str
 */
void Int_OLED_Send_Str(u8 *str, u8 str_lenth)
{
    Int_OLED_Send(str, str_lenth, 1);
}

/**
 * @brief 发送命令
 *
 * @param com
 */
void Int_OLED_Send_Com(u8 *com, u8 com_lenth)
{
    Int_OLED_Send(com, com_lenth, 0);
}

code u8 datas[16]   = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
code u8 datas_w[16] = {0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff, 0Xff};
/**
 * @brief 清除
 *
 */
void Int_OLED_Clear()
{
    u8 i;
    // 设置水平清除
    u8 init_com[2];
    // 设置显示模式(水平)
    init_com[0] = 0X20;
    init_com[1] = 0X00;
    // // 全部列
    //init_com[2] = 0X21;
    // 全部page
    //init_com[3] = 0X22;
    Int_OLED_Send_Com(init_com, 2);

    for (i = 0; i < 64; i++) {
        // 发送数据;
        Int_OLED_Send_Str(datas, 16);
    }
}
